package py.com.sole.dao.impl;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import py.com.sole.dao.DaoFactory;
import py.com.sole.dao.PersonaDao;
import py.com.sole.model.Persona;

public class PersonaDaoImpl implements PersonaDao {

  EntityManager em;

  public PersonaDaoImpl() {
    em = DaoFactory.getEm();
  }

  @Override
  public Persona getPersonaById(int id) {
    try {
      Query query = em.createNamedQuery("Persona.findById");
      query.setParameter("personaId", id);
      return (Persona) query.getSingleResult();
    } catch (Exception e) {
      return null;
    }

  }

  @Override
  public Persona getPersonaByDocumento(String documento) {
    try {
      Query query = em.createNamedQuery("Persona.findByDocumento");
      query.setParameter("personaDocumento", documento);
      return (Persona) query.getSingleResult();
    } catch (Exception e) {
      return null;
    }
  }

  @Override
  public Persona addPersona(Persona persona) {
    try {
      EntityTransaction ets = em.getTransaction();
      ets.begin();
      em.persist(persona);
      ets.commit();
      em.refresh(persona);
      return persona;
    } catch (Exception e) {
      return null;
    }
  }

  @Override
  public Persona updatePersona(Persona persona) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public void deletePersona(Persona persona) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.

  }

  @Override
  public List<Persona> getPersonas() {
    return em.createQuery("SELECT p FROM Persona p").getResultList();
  }

  @Override
  public List<Persona> filtrarPersonas(String busqueda) {
    List<Persona> personas = new ArrayList<Persona>();
    try {

      Query query = em.createQuery("Select a from Persona a where UPPER(a.nombre) like :nombre or UPPER(a.apellido) like :nombre  ");
      query.setParameter("nombre", "%" + busqueda.toUpperCase() + "%");
      personas = query.getResultList();
      if (null == personas || personas.size() == 0) {
        System.out.println("Filtrar Personas: " + busqueda + " no tiene registros");

      }

    } catch (Exception e) {
      System.out.println("Error: " + e.toString());
    }
    return personas;
  }

}
